package edu.dayu.demo2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 给你一个字符串 s ，它包含一些括号对，每个括号中包含一个 非空 的键。
 * 输入：s = "hi(name)", knowledge = [["a","b"]]
 * 输出："hi?"
 * 解释：由于不知道键 "name" 对应的值，所以用 "?" 替换 "(name)" 。
 * 思路： 暴力解法 先把对应的装进 hashmap 然后扫到就去 hash 里面拿，拿不到就给问号
 */
public class 替换字符串中的括号内容 {
    public static void main(String[] args) {
        String s = "(name)is(age)yearsold";
        List<List<String>> list = new ArrayList<>();
        List<String> list1 = new ArrayList<>();
        list1.add("name");
        list1.add("bob");
        list.add(list1);
        System.out.println(evaluate(s,list));
    }

    public static String evaluate(String s, List<List<String>> knowledge) {
        HashMap<String, String> map = new HashMap<>();
        for (List<String> list : knowledge) {
            map.put(list.get(0),list.get(1));
        }
        // 设置（ 起始标志位
        int start=0;
        String str;
        StringBuilder stringBuffer = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (s.charAt(i)=='('){
                start = i+1;
            }
            // 这句代码很精髓
            if (start == 0){
                stringBuffer.append(c);
            }
            if (s.charAt(i)==')'){
                str = s.substring(start,i);
                start = 0;
                String s1 = map.get(str);
                if (s1!=null){
                   stringBuffer.append(s1);
                }else {
                    stringBuffer.append("?");
                }
            }
        }
        return stringBuffer.toString();
    }
}
